來到了第十天,今天要更深入了解 struct 在 Go 裡面扮演的角色,
話不多說,我們就進入正題吧 ─=≡Σ(((っ゚∀゚)っ
Structure(簡稱 Struct)在 Go 能讓使用者透過集合不同資料打包成一個自行定義型別,而透過自定義型別生出來的資料,在物件導向的概念就可以被稱作實體,甚至可以把它想像成是一個無法繼承的類別。
type Cat struct {
name string
age int
}
一個 struct 可能會有零到多個欄位,每個欄位都會對應一個資料型態。
如果 struct 有多個型別相同的欄位,可以合併為一條:
type Cat struct {
name, breed string
age int
}
而要使用 struct 的方式,與宣告變數的方式一樣,並且有幾種的賦值方式:
map
類似,一個欄位對應一個值。type Cat struct {
name, breed string
age int
}
cat := Cat{name: "BuiBui", breed: "Mix", age: 5}
fmt.Println(cat)
type Cat struct {
name, breed string
age int
}
cat := Cat{"BuiBui", "Mix", 5}
fmt.Println(cat)
type Cat struct {
name, breed string
age int
}
cat := &Cat{"BuiBui", "Mix", 5}
fmt.Println(cat)
登愣,狀況題來了!
請問 struct 內欄位的型別可以用 struct 嗎?
當然可以!基本上 struct 內要放什麼資料型別都是沒問題的,
來看看巢狀的 struct 該怎麼應用吧:
package main
import "fmt"
type Cat struct {
name, breed string
age int
owner Ower
}
type Ower struct {
name, gender string
age int
}
func main() {
cat := Cat{
name: "BuiBui",
breed: "Mix",
age: 5,
owner: Ower{
name: "Chan",
gender: "female",
age: 18}}
fmt.Println(cat
}
只要在 ower
欄位以 Type{key: value}
形式書寫就行了,是不是超簡單呢!
雖然欄位配型別看起來很舒服,但其實 Go 也支援只提供型別,不寫欄位的方式。
package main
import "fmt"
type Cat struct {
string
int
Ower
}
type Ower struct {
string
int
}
func main() {
cat := Cat{"BuiBui", 5, Ower{"Chan", 18}}
fmt.Println(cat)
}
struct 的文章就到今天結束,有任何問題都歡迎與我告知 :)
鐵人賽文章也同時發佈於 這裡